<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style></style>
  </head>
  <body>
    <div>函数组合概念</div>
    <p>组合函数</p>
    <p>纯函数和柯里化很容易写出洋葱代码h(g(f(x)))</p>
    <p>
      获取数组的最后一个元素在转换成大写字母，`_.toUpper(_.frist(_.reverse(array)))`
    </p>
    <p>函数组合可与让我们把细粒度的函数重新组合生成一个新的函数</p>

    <p>函数组合(compose)</p>
    <p>
      函数组合：如果一个函数要经过多个函数处理才得到最终值，这个时候把中间过程的函数合并成一个函数
    </p>
    <p>
      函数就像是数据管道，函数组合就是把这些管道链接起来，让数据穿过管道形成最终结果
    </p>
    <p>函数组合默认是从右到左执行</p>
    <script>
      //组合函数案例演示

      function compose(f, g) {
        return function (value) {
          return f(g(value));
        };
      }

      function reverse(array) {
        return array.reverse();
      }

      function first(array) {
        return array[0];
      }
      let arr = ["hhh", "jjj", "kkk"];
      let results = compose(first, reverse);
      console.log(results(arr));
    </script>
  </body>
</html>
